package com.wgy.day29多线程.线程状态之等待唤醒状态;

/*
老板/包子铺线程:对包子的状态进行判断
                 true 有包子 包子铺线程等待
                 false 没有包子  包子铺生产包子(交替生产2中包子)-->包子铺生产好了包子-->修改包子的状态为有
                                -->唤醒吃货线程吃包子
                                */
public class BaoZiPu extends Thread {
    private BaoZi baozi;

    public BaoZiPu(BaoZi baozi) {
        this.baozi = baozi;
    }

    @Override
    public void run() {
        int count = 1;
        while (true) {
            //必须使用同步技术,保证两个线程只有一个在执行
            synchronized (baozi) {
                //对包子的状态进行判断
                if (baozi.flag == true) {
                    //包子铺调用wait方法进入等待
                    try {
                        baozi.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                if (count % 2 == 0) {
                    baozi.pi = "冰皮";
                    baozi.xian = "牛肉大葱馅";
                } else {
                    baozi.pi = "薄皮";
                    baozi.xian = "三鲜";
                }
                count++;
                System.out.println("包子铺正在生产" + baozi.pi + baozi.xian + "的包子");
                //生产包子花了5秒钟
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //包子铺生产好了包子
                //修改包子的状态为 有
                baozi.flag = true;
                System.out.println("包子铺花了5秒把包子做好啦!");
                //唤醒吃货线程吃包子
                baozi.notify();
                System.out.println("吃货们可以吃包子啦!");

            }

        }

    }
}
